import {config} from '@/config/axios/config'
import {MockMethod} from 'vite-plugin-mock'
import {toAnyString} from '@/utils'
import Mock from 'mockjs'

const {result_code} = config

const timeout = 1000

const count = 100

const baseContent =
    '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>'

let List: {
    id: string
    author: string
    title: string
    content: string
    importance: number
    display_time: string
    pageviews: number
}[] = []

for (let i = 0; i < count; i++) {
    List.push(
        Mock.mock({
            id: toAnyString(),
            // timestamp: +Mock.Random.date('T'),
            author: '@first',
            title: '@title(5, 10)',
            content: baseContent,
            importance: '@integer(1, 3)',
            display_time: '@datetime',
            pageviews: '@integer(300, 5000)'
            // image_uri
        })
    )
}

export default [
    // 列表接口
    {
        url: '/example/list',
        method: 'get',
        timeout,
        response: ({query}) => {
            const {title, pageIndex, pageSize} = query
            const mockList = List.filter((item) => {
                if (title && item.title.indexOf(title) < 0) return false
                return true
            })
            const pageList = mockList.filter(
                (_, index) => index < pageSize * pageIndex && index >= pageSize * (pageIndex - 1)
            )
            return {
                code: result_code,
                data: {
                    total: mockList.length,
                    list: pageList
                }
            }
        }
    },
    // 保存接口
    {
        url: '/example/save',
        method: 'post',
        timeout,
        response: ({body}) => {
            if (!body.id) {
                List = [
                    Object.assign(body, {
                        id: toAnyString()
                    })
                ].concat(List)
                return {
                    code: result_code,
                    data: 'success'
                }
            } else {
                List.map((item) => {
                    if (item.id === body.id) {
                        for (const key in item) {
                            item[key] = body[key]
                        }
                    }
                })
                return {
                    code: result_code,
                    data: 'success'
                }
            }
        }
    },
    // 详情接口
    {
        url: '/example/detail',
        method: 'get',
        response: ({query}) => {
            const {id} = query
            for (const example of List) {
                if (example.id === id) {
                    return {
                        code: result_code,
                        data: example
                    }
                }
            }
        }
    },
    // 删除接口
    {
        url: '/example/delete',
        method: 'post',
        response: ({body}) => {
            const ids = body.ids
            if (!ids) {
                return {
                    code: '500',
                    message: '请选择需要删除的数据'
                }
            } else {
                let i = List.length
                while (i--) {
                    if (ids.indexOf(List[i].id) !== -1) {
                        List.splice(i, 1)
                    }
                }
                return {
                    code: result_code,
                    data: 'success'
                }
            }
        }
    }
] as MockMethod[]
